package lx4;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.UUID;

//客户端：将本地文件上传到服务器。接收服务器的反馈。
//服务器：接收客户端上传的文件，上传完毕之后给出反馈。
public class Server {
    public static void main(String[] args) throws IOException {
    /*
        流程:1.用FileInputStream读取本地文件
        2.读到内存中以后，再用网络的io传递给服务器
        3.服务器接收到文件以后，用FileOutputStream写入到本地
        4.当写入完毕以后，服务器给出反馈---- 写入成功
         */
        //创建服务器对象绑定端口号
        ServerSocket ss = new ServerSocket(10000);
        //等待客服端连接，连接成功返回一个socket对象
        Socket socket = ss.accept();
        //读取客服端发来的文件数据，并保持到本地文件当中
        BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
        String name = UUID.randomUUID().toString().replace("-", "");
        //创建一个输出流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("..\\day56\\Server\\"+name+".jpg"));
        //边读边写
        byte[] bytes = new byte[1024];
        int len;
        while (((len = bis.read(bytes)) != -1)) {
            bos.write(bytes, 0, len);
        }
        bos.close();
        //到了这里说明文件已经写完了
        //向客服端发送反馈说明上传成功了
        //一句话我们可以使用字符缓冲流
        String str = "上传成功";
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bw.write(str);

        //关闭流
        socket.close();//断开了与客服端的连接
        ss.close();//关闭服务器
    }
}
